home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / othello2.arc / OTHELLO2.BAS (.txt) next >
Encoding:
GW-BASIC  |  1984-04-24  |  3.8 KB  |  160 lines

  1. 10  '     *** Othello ***
  2. 20  '         5/15/82
  3. 30  'Translated from a TRS-80 Version
  4. 40  '
  5. 50  SCREEN 1,0
  6. 60  KEY OFF
  7. 70  COLOR 1,0
  8. 80  CLS
  9. 90  DEFINT A-Z
  10. 100  DIM BOX(64),A(50),B(50),C(8002)
  11. 110  DEF FNR(X)=INT(RND*X+1)
  12. 120  S$=SPACE$(39)
  13. 130  RANDOMIZE VAL (MID$(TIME$,4,2))*VAL (RIGHT$(TIME$,2))-VAL(RIGHT$(TIME$,2))^2
  14. 140  LINE (0,0)-(19,18),1,BF
  15. 150  GET (0,0)-(19,18),A
  16. 160  LINE (0,0)-(19,18),2,BF
  17. 170  LINE (6,6)-(13,12),0,BF
  18. 180  GET (0,0)-(19,18),B
  19. 190  CLS
  20. 200  FOR X= 75 TO 243 STEP 21
  21. 210  LINE (X,0)-(X,160),3
  22. 220  NEXT
  23. 230  FOR Y= 0 TO 160 STEP 20
  24. 240  LINE (75,Y)-(243,Y),3
  25. 250  NEXT
  26. 260  FOR K=1 TO 64
  27. 270  LOCATE 1,1
  28. 280  PRINT RIGHT$(STR$(K),2);
  29. 290  GET (0,0)-(15,7),C
  30. 300  Y=INT((K-1)/8):X=K-8*Y
  31. 310  PUT ((X-1)*21+78,Y*20+6),C
  32. 320  NEXT
  33. 330  LOCATE 1,1:PRINT"  ";
  34. 340  GET (0,0)-(319,199),C
  35. 350  CLS
  36. 360  FOR X=1 TO 64:BOX(X)=0:NEXT
  37. 370  BOX(28)=1:BOX(37)=1
  38. 380  BOX(29)=-1:BOX(36)=-1
  39. 390  GOTO 530
  40. 400  ' subroutine to draw the boxes
  41. 410  SCOREA=0:SCOREB=0:FOR KB=1 TO 64
  42. 420  IF BOX(KB)=0 THEN 470
  43. 430  YB=INT((KB-1)/8):XB=KB-8*YB
  44. 440  IF BOX(KB)=1 THEN 450 ELSE 460
  45. 450  PUT ((XB-1)*21+76,YB*20+1),A,PSET:SCOREA=SCOREA+1:GOTO 470
  46. 460  PUT ((XB-1)*21+76,YB*20+1),B,PSET:SCOREB=SCOREB+1
  47. 470  NEXT KB
  48. 480  LOCATE 19,3:PRINT RIGHT$(STR$(SCOREA),2):LOCATE 19,35:PRINT RIGHT$(STR$(SCOREB),2)
  49. 490  RETURN
  50. 500  '
  51. 510  FOR X=1 TO 2000:NEXT :RETURN
  52. 520  LOCATE 22,1:PRINT S$;:LOCATE 22,11:RETURN
  53. 530  K=FNR(2):B$="I"
  54. 540  LOCATE 1,17:PRINT"OTHELLO":PRINT:PRINT "1 or 2 Players ";
  55. 550  J$=INKEY$:IF J$=""THEN 550 ELSE J=VAL (J$)
  56. 560  IF J<1 OR J>2 THEN BEEP:GOTO 550 ELSE PRINT J
  57. 570  PRINT:INPUT "What is your name ";A$
  58. 580  F=1:IF J=2 THEN 610
  59. 590  CLS:PUT (0,0),C
  60. 600  ON K GOTO 620,630
  61. 610  PRINT:INPUT "and your opponent's name ";B$:GOTO 590
  62. 620  LOCATE 14,1:PRINT A$;:LOCATE 14,33:IF B$="I"THEN PRINT"IBM":GOTO 640:ELSE PRINT B$:GOTO 640
  63. 630  LOCATE 14,33:PRINT A$;:LOCATE 14,1:IF B$="I"THEN PRINT"IBM"ELSE PRINT B$
  64. 640  PUT (0,112),A:PUT (256,112),B
  65. 650  LOCATE 18,1:PRINT"Score":LOCATE 18,33:PRINT"Score"
  66. 660  GOSUB 400
  67. 670  GOTO 1060
  68. 680  GOSUB 400:LOCATE 22,11:PRINT A$", ";:GOTO 730
  69. 690  GOSUB 400:LOCATE 22,11:PRINT B$", ";:GOTO 730
  70. 700  GOSUB 520:GOSUB 400:LOCATE 22,7:PRINT"My turn. I'm thinking maybe"
  71. 710  GOSUB 1180:RESTORE:IF R=0 THEN 680
  72. 720  GOSUB 520:PRINT "and I will play"T:Z=T:E=0:GOTO 790
  73. 730  I$="":Z$="":INPUT "select or pass";Z$:GOSUB 520
  74. 740  Z=VAL (Z$):IF Z$<>"R" AND Z$<>"r" THEN 750
  75. 750  GOSUB 520:IF Z$="p" OR Z$="P" THEN 1010
  76. 760  IF Z>0 AND Z<65 THEN 780
  77. 770  BEEP:PRINT"No such square!!":GOSUB 510:GOSUB 520:GOTO 1060
  78. 780  IF BOX(Z)<>0 THEN 810
  79. 790  W=0:L=0:E=0:GOSUB 820:IF W=0 THEN 1060
  80. 800  F=-F:GOTO 1060
  81. 810  BEEP:PRINT"Square occupied !!":GOSUB 510:GOSUB 520:GOTO 1060
  82. 820  D=1:GOSUB 850:D=-1:GOSUB 850:FOR D=7 TO 9:GOSUB 850:NEXT D:FOR D=-9 TO -7:GOSUB 850:NEXT D
  83. 830  IF E<>1 THEN 1470
  84. 840  RETURN
  85. 850  G=Z+D
  86. 860  IF G<1 THEN RETURN
  87. 870  IF G>64 THEN RETURN
  88. 880  IF BOX(G)=F THEN RETURN
  89. 890  IF BOX(G)=0 THEN RETURN
  90. 900  IF ABS(D)=8 THEN 930
  91. 910  IF INT(G/8)=G/8 THEN RETURN
  92. 920  IF INT((G-1)/8)=(G-1)/8 THEN RETURN
  93. 930  G=G+D:IF G<1 THEN RETURN
  94. 940  IF G>64 THEN RETURN
  95. 950  IF BOX(G)=F THEN 970
  96. 960  GOTO 890
  97. 970  Y=0:W=1:IF E=1 THEN 1000
  98. 980  IF L=1 THEN RETURN
  99. 990  FOR X=G-D TO Z+D STEP -D:BOX(X)=F:NEXT:RETURN
  100. 1000  FOR X=G-D TO Z+D STEP -D:Q=Q+1:NEXT X:RETURN
  101. 1010  W=0:L=1:FOR Z=1 TO 64:IF BOX(Z)<>0 THEN 1030
  102. 1020  GOSUB 820:IF W=1 THEN 1050
  103. 1030  NEXT Z:IF Y=1 THEN 1530
  104. 1040  Y=1:F=-F:GOTO 1060
  105. 1050  BEEP:PRINT"You can play at"Z;:GOSUB 510
  106. 1060  IF J=1 THEN 1100
  107. 1070  IF F=1 THEN 1130
  108. 1080  IF K=1 THEN 690
  109. 1090  GOTO 680
  110. 1100  IF F=1 THEN 1150
  111. 1110  IF K=1 THEN 700
  112. 1120  GOTO 680
  113. 1130  IF K=1 THEN 680
  114. 1140  GOTO 690
  115. 1150  IF K=1 THEN 680
  116. 1160  GOTO 700
  117. 1170  CLS:GOTO 670
  118. 1180  R=0:T=0:E=1
  119. 1190  FOR P=28 TO 1 STEP -1:IF BOX(P)<>0 THEN I=P-9
  120. 1200  NEXT P:FOR P=37 TO 64:IF BOX(P)<>0 THEN O=P+9
  121. 1210  NEXT P:FOR P=1 TO 4:READ Z:IF BOX(Z)<>0 THEN 1240
  122. 1220  IF (Z<I)+(Z>O) THEN 1240
  123. 1230  GOSUB 1410:IF Q<>0 THEN 1380
  124. 1240  NEXT P:R=0:FOR P=1 TO 12:READ A,B,N,M:FOR Z=A TO B STEP N
  125. 1250  IF BOX(Z)<>0 THEN 1330
  126. 1260  IF (Z<I)+(Z>O) THEN 1340
  127. 1270  GOSUB 1410:IF Q=0 THEN 1330
  128. 1280  IF Q*M>R THEN 1310
  129. 1290  IF Q*M=R THEN 1320
  130. 1300  GOTO 1330
  131. 1310  R=Q*M:T=Z:GOTO 1330
  132. 1320  IF FNR(3)=2 THEN T=Z
  133. 1330  NEXT Z
  134. 1340  NEXT P:IF R<>0 THEN RETURN
  135. 1350  FOR P=1 TO 12:READ Z:IF BOX(Z)<>0 THEN 1370
  136. 1360  GOSUB 1410:IF Q<>0 THEN 1380
  137. 1370  NEXT P:GOTO 1390
  138. 1380  R=Q:T=Z:RETURN
  139. 1390  PRINT"I must pass":IF Y=1 THEN 1530
  140. 1400  Y=1:F=-F:GOSUB 510:RETURN
  141. 1410  N=T:IF T=0 THEN N=Z
  142. 1420  Q=0:LOCATE 22,34:PRINT N;:GOSUB 820:RETURN
  143. 1430  DATA 1,8,57,64,3,6,1,3,24,48,8,3,59,62,1,3,17,41,8,3
  144. 1440  DATA 11,14,1,1,23,47,8,1,51,54,1,1,18,42,8,1
  145. 1450  DATA 19,22,1,2,27,30,1,2,35,38,1,2,43,46,1,2
  146. 1460  DATA 2,16,63,49,7,56,58,9,10,15,55,50
  147. 1470  IF L=1 THEN RETURN
  148. 1480  IF W=1 THEN 1500
  149. 1490  BEEP:PRINT"Illegal move !!";:GOSUB 510:GOSUB 520:RETURN
  150. 1500  BOX(Z)=F
  151. 1510  FOR X=1 TO 64:IF BOX(X)=0 THEN RETURN
  152. 1520  NEXT X
  153. 1530  GOSUB 520:GOSUB 400:PRINT"Game over"
  154. 1540  LOCATE 23,11:PRINT "Play again ?";
  155. 1550  A$=INKEY$:IF A$=""THEN 1550
  156. 1560  IF A$=CHR$(13) OR A$="Y" OR A$="y" THEN RUN
  157. 1570  WIDTH 80
  158. 1580  SCREEN 0,1:COLOR 4,0,0:CLS
  159. 1590  LOCATE 12,1:PRINT "OTHELLO.BAS Terminated. Hope you had fun!"
  160.